# -*- encoding: utf-8 -*-
#
# Author: LL
#
# cython: language_level=3



def find_all_index(s, sub):
    """
    找到字串所有出现位置。

    Args:
        s (str): 源字符串
        sub (str): 需要查询的子字符串

    Yields:
        generatpr: 返回所有出现位置的迭代器
    """
    start = 0
    while True:
        start = s.find(sub, start)
        if start == -1:
            return
        yield start
        start += len(sub)

def longest_common_sub_str(text1, text2):
    """
    求出 text1, text2 的最长公共子序列长度。

    Args:
        text1 (str): 字符串
        text2 (str): 字符串
    """
    m, n = len(text1), len(text2)
    pre, cur = [0] * (n + 1), [0] * (n + 1)
    max_len = 0
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if text1[i-1] == text2[j-1]:
                cur[j] = pre[j - 1] + 1
            else:
                cur[j] = max(pre[j], cur[j-1])
            max_len = max(max_len, cur[j])
        pre = cur
        cur = [0] * (n + 1)
    return max_len


def strip_markdown(text: str) -> str:
    """
    去除文本中的常见 Markdown 格式标记，只保留纯文本内容。
    
    参数：
    text (str): 含有 Markdown 标记的原始文本
    
    返回：
    str: 处理后的纯文本
    """
    # 1. 去除标题标记（如 #、##、### 等）。保留换行。
    #    '^#{1,6}\s+' 匹配行首的至少1个 # + 空格
    text = re.sub(r'^#{1,6}\s+', '', text, flags=re.MULTILINE)
    
    # 2. 去除行内粗体/斜体（**...**、*...*、__...__、_..._）
    #  注意顺序，先处理 **...**，再处理 *...*，否则可能造成冲突
    #  这里用非贪婪匹配 (.*?) 来匹配最短的“闭合”
    text = re.sub(r'\*\*(.*?)\*\*', r'\1', text)
    text = re.sub(r'__(.*?)__', r'\1', text)
    text = re.sub(r'\*(.*?)\*', r'\1', text)
    text = re.sub(r'_(.*?)_', r'\1', text)

    # 3. 去除行内反引号（`...`）
    text = re.sub(r'`([^`]+)`', r'\1', text)

    # 4. 去除链接 [显示文本](链接地址) 或 ![图片文本](图片地址)
    #    这里只保留“显示文本”，不保留链接地址
    #    如果想完全移除链接部分可改成 ''
    text = re.sub(r'!\[.*?\]\(.*?\)', '', text)   # 移除图片
    text = re.sub(r'\[(.*?)\]\(.*?\)', r'\1', text)

    # 5. 去除多余的 Markdown 列表标记（-、+、* 或数字加.），只保留后面的内容
    #    如 "- item1" 或 "* item2" 或 "1. item3"
    text = re.sub(r'^[\*\-\+]\s+', '', text, flags=re.MULTILINE)
    text = re.sub(r'^\d+\.\s+', '', text, flags=re.MULTILINE)

    # 6. 去除多余的 <br> 或 <hr> 等 HTML 标签（如有）
    #    如果 Markdown 转义中带有 HTML，可以选做
    text = re.sub(r'<br\s*/?>', '', text)
    text = re.sub(r'<hr\s*/?>', '', text)

    # 可根据需求去除多余的空行（如果想要保留则无需此步）
    # 连续多个空行合并为一个空行
    text = re.sub(r'\n\s*\n+', '\n\n', text)

    # 去除文本开头结尾多余空白
    text = text.strip()

    return text